def sep(label=''):
    """Utility function to print separator lines."""
    print('-' * 32, label, '-' * 32, sep='')


# 1.	使用小型共享单车数据集，完成以下操作（hour.csv）
# (1)	导入必要的库（7分）
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# (2)	导入数据（7分）
sep('导入数据')
df = pd.read_csv(r'../../../large_data/共享单车/hour.csv')
print(df[:5])

# (3)	查看数据信息（信息函数）（8分）
sep('查看数据信息')
print(df.info())

# (4)	查看列名（8分）
sep('查看列名')
print(df.columns)

# (5)	绘制小时和季节影响点线图
# ①	使用season和hr进行分组，按照hr排序，求cnt均值（10分）
sep('使用season和hr进行分组')
# grp = df.groupby(['season', 'hr'])
# 按照hr排序 不会做 减3分  # ATTENTION
# UPD:
# https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html
# grp = df.groupby(['season', 'hr'], sort='hr')
grp = df.groupby(['season', 'hr'], sort=True)

sep('求cnt均值')
print(grp['cnt'].mean())
# UPD
print(grp.agg(np.mean)['cnt'])

# ②	重置索引值（10分）
# 不会做 减10分  # ATTENTION
# UPD
sep('重置索引值')
df.reset_index(inplace=True)
print(df[:5])

# ③	绘制点线图（10分）
# ④	X为hr，y为cnt，绘制4条点线图（10分）
# 不会做 减10分  # ATTENTION
# UPD
# 绘制4条点线图，就是hue='season'，按季节细分。（你看这题出的）
sns.pointplot(x='hr', y='cnt', hue='season', data=df)
plt.show()

# (6)	绘制热力图
# ①	查看['temp', 'atemp', 'hum', 'windspeed', 'cnt']的皮尔逊系数（10分）
sep("查看['temp', 'atemp', 'hum', 'windspeed', 'cnt']的皮尔逊系数")
df2 = pd.DataFrame({'temp': df['temp'],
                    'atemp': df['atemp'],
                    'hum': df['hum'],
                    'windspeed': df['windspeed'],
                    'cnt': df['cnt']})
xcorr = df2.corr()
print(xcorr)

# ②	绘制热力图（10分）
# ③	热力图上标有数值（10分）
sns.heatmap(xcorr, annot=True)
plt.show()
